package main

// type S struct {
// 	Name string
// }
// type S1 struct {
// 	Name string `json:"name"` // 原来叫Name转完了叫name  name随意写
// }
// type Item struct {
// 	Name string
// }

// type Items struct {
// 	Item []Item
// }

func main() {

	// // 结构体转json
	// as := S{
	// 	Name: "123",
	// }
	// jsons, _ := json.Marshal(as)
	// fmt.Println(string(jsons))

	// // json字符串转结构体 注意传入地址去接收这个会改变指定类型地址的值
	// var a S
	// err := json.Unmarshal(jsons, &a)
	// fmt.Printf("%#v", a, err)

	// 如果结构体定义 属性首字母小写是不能转成json的 私有字段json包无法访问

	// 结构体标签
	// as := S1{
	// 	Name: "123",
	// }
	// jsons, _ := json.Marshal(as)
	// fmt.Println(string(jsons)) // 返回的Name是大写的如何变小写？ 定义结构体标签 看 S 和 S1的区别

	// 嵌套转
	// a := Items{
	// 	Item: make([]Item, 4, 4),
	// }
	// jsonStr, _ := json.Marshal(a)
	// fmt.Println(string(jsonStr))

	// // 嵌套转回来
	// var b Items
	// var str = []byte(`{"Item":[{"Name":""},{"Name":""},{"Name":""},{"Name":""}]}`)
	// err := json.Unmarshal(str, &b)

	// fmt.Printf("%#v", b.Item[0])
	// fmt.Println(err)

}
